"use strict";
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
    if (k2 === undefined) k2 = k;
    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
}) : (function(o, m, k, k2) {
    if (k2 === undefined) k2 = k;
    o[k2] = m[k];
}));
var __exportStar = (this && this.__exportStar) || function(m, exports) {
    for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.loadFoo = exports.s4 = exports.s3 = exports.ss = void 0;
// Type Declaration Space 
var Foo = /** @class */ (function () {
    function Foo() {
    }
    return Foo;
}());
;
;
// Variable Declaration Space : can use as a variable
var Foo1 = /** @class */ (function () {
    function Foo1() {
    }
    return Foo1;
}());
;
var s = Foo1;
// Module
exports.ss = 2222;
var s2 = 123;
exports.s3 = s2;
__exportStar(require("./1"), exports);
var _1_1 = require("./1");
Object.defineProperty(exports, "s4", { enumerable: true, get: function () { return _1_1.s3; } });
var fooo = require("foo"); // foo is declared in global.d.ts
fooo.bar;
var foo = require("foo"); // imports the type information when foo not used in the variable declaration the import is completely removed from generated javascript
foo.bar;
function loadFoo() {
    // This is lazy loading `foo` and using the original module *only* as a type annotation
    var _foo = require('foo');
    // Now use `_foo` as a variable instead of `foo`.
}
exports.loadFoo = loadFoo;
// ensure import load a file just for the side effect
var fo0o1 = require("foo");
var bar1 = require("foo");
var bas1 = require("foo");
var ensureImport = fo0o1
    && bar1
    && bas1;
// namespaces
var Utility;
(function (Utility) {
    function log() { }
    Utility.log = log;
})(Utility || (Utility = {}));
// nested namespace
(function (Utility) {
    var msg;
    (function (msg) {
        function log() { }
        msg.log = log;
    })(msg = Utility.msg || (Utility.msg = {}));
})(Utility || (Utility = {}));
Utility.log();
Utility.msg.log();
